Day 6 조건문, 반복문
Day6 6단계 20231023
5. 수열과 구간 쿼리 2
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
List<Integer> compare = new ArrayList<>();
int[] answer = new int[queries.length];
int min = 0;
int answerIndex = 0;
for (int[] querry : queries) {
for (int i = 0; i < arr.length; i++) {
if (i >= querry[0] && i <= querry[1] && arr[i] > querry[2]) {
compare.add(arr[i]);
min = Collections.min(compare);
}
if (compare.isEmpty()) {
min = -1;
}
}
answer[answerIndex] = min;
min = 0;
answerIndex++;
compare.clear();
}
return answer;
}
}
- 스트림으로 풀 다른 사람의 풀이
스트림의 연산
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = {};
return IntStream.range(0, queries.length)
.map(q -> IntStream.rangeClosed(queries[q][0], queries[q][1])
.map(i -> arr[i])
.filter(i -> i > queries[q][2]) .min().orElse(-1) ).toArray(); } }
풀이 해설(챗gpt)
int[] answer = {};: 빈 배열을 생성하여 결과를 저장할answer배열을 초기화합니다.IntStream.range(0, queries.length):queries배열의 인덱스 범위에 대한 IntStream을 생성합니다. 이 스트림은 각 쿼리를 순회하기 위해 사용됩니다..map(q -> ...): 각 쿼리에 대한 연산을 수행하는 람다 표현식입니다.q는 현재 처리 중인 쿼리의 인덱스를 나타냅니다.IntStream.rangeClosed(queries[q][0], queries[q][1]): 현재 쿼리의 시작과 끝 범위에 대한 IntStream을 생성합니다. 이 스트림은 현재 쿼리 범위 내의 요소를 순회하는 데 사용됩니다..map(i -> arr[i]): 현재 쿼리 범위 내의 인덱스에 해당하는arr배열의 요소를 가져옵니다..filter(i -> i > queries[q][2]): 현재 쿼리에서 주어진k값보다 큰 요소만을 필터링합니다..min().orElse(-1): 필터링된 요소 중 최솟값을 찾아 반환합니다. 만약 요소가 없으면(모든 요소가k보다 작다면), -1을 반환합니다..toArray(): IntStream의 결과를 int 배열로 변환하여 해당 쿼리에 대한 결과를 저장합니다.